home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / GMS / GMSDev / Includes / system / modules.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-03  |  4.4 KB  |  149 lines

  1. #ifndef SYSTEM_MODULES_H
  2. #define SYSTEM_MODULES_H TRUE
  3.  
  4. /*
  5. **  $VER: modules.h V1.0
  6. **
  7. **  (C) Copyright 1996-1998 DreamWorld Productions.
  8. **      All Rights Reserved.
  9. **
  10. */
  11.  
  12. #ifndef DPKERNEL_H
  13. #include <dpkernel/dpkernel.h>
  14. #endif
  15.  
  16. #ifndef SYSTEM_GLOBALBASE_H
  17. #include <system/globalbase.h>
  18. #endif
  19.  
  20. /*****************************************************************************
  21. ** Module Object.
  22. */
  23.  
  24. #define VER_MODULE  1
  25. #define TAGS_MODULE ((ID_SPCTAGS<<16)|ID_MODULE)
  26.  
  27. struct Module {
  28.   struct Head Head;              /* [00] Standard header */
  29.   WORD   Number;                 /* [12] Number of the associated module */
  30.   APTR   ModBase;                /* [14] Ptr to function jump table */
  31.   struct Segment *Segment;       /* [18] Segment pointer */
  32.   WORD   TableType;              /* [22] Type of table */
  33.   WORD   emp1;                   /* [24] */
  34.   struct Function *FunctionList; /* [26] Array of functions */
  35.   LONG   Version;                /* [30] Version of the module */
  36.   LONG   Revision;               /* [34] Revision of the module */
  37.   struct ModHeader *Table;       /* [38] Header */
  38.   BYTE   *Name;                  /* [42] Name of the module */
  39. };
  40.  
  41. struct Function {
  42.   APTR Address;
  43.   BYTE *Name;
  44. };
  45.  
  46. #define MODA_Number    (12|TWORD)
  47. #define MODA_TableType (22|TWORD)
  48. #define MODA_Version   (30|TLONG)
  49. #define MODA_Revision  (34|TLONG)
  50. #define MODA_Name      (42|TAPTR)
  51.  
  52. /*****************************************************************************
  53. ** Table-Type definitions.
  54. */
  55.  
  56. #define JMP_DEFAULT 1  /* LVO jump type (standard) */
  57. #define JMP_AMIGAE  2  /* Amiga E jump table */
  58.  
  59. #define JMP_LIBRARY JMP_AMIGAE
  60. #define JMP_LVO     JMP_DEFAULT
  61.  
  62. /*****************************************************************************
  63. ** Module file header.
  64. */
  65.  
  66. #define MODULE_HEADER_V1 0x4D4F4401
  67.  
  68. struct ModHeader {
  69.   LONG Version;
  70.  
  71.   #ifdef _DCC
  72.     LONG (*Init)(__A0 struct Module *, __A1 APTR DPKBase, __A2 struct GVBase *,
  73.                  __D0 LONG dpkVersion, __D1 LONG dpkRevision);
  74.     void (*Close)(__A0 struct Module *);
  75.     LONG (*Expunge)(void);
  76.   #else
  77.    #ifdef __SASC
  78.     __asm LONG (*Init)(register __a0 struct Module *, register __a1 APTR DPKBase,
  79.                  register __a2 struct GVBase *, register __d0 LONG dpkVersion,
  80.                  register __d1 LONG dpkRevision);
  81.     __asm void (*Close)(register __a0 struct Module *);
  82.     __asm LONG (*Expunge)(void);
  83.    #else
  84.     LONG (*Init)(struct Module *, APTR DPKBase, struct GVBase *, LONG dpkVersion,
  85.            LONG dpkRevision);
  86.     void (*Close)(struct Module *);
  87.     LONG (*Expunge)(void);
  88.    #endif
  89.   #endif
  90.  
  91.   WORD  TableType;      /* Type of function table to generate */
  92.   WORD  OpenCount;      /* Amount of programs with this module open */
  93.   BYTE  *Author;        /* Author of the module */
  94.   struct Function *DefaultList;   /* Pointer to default function list */
  95.   LONG  CPUNumber;      /* CPU that this module is compiled for */
  96.   LONG  ModVersion;     /* Version of this module */
  97.   LONG  ModRevision;    /* Revision of this module */
  98.   LONG  MinDPKVersion;  /* Minimum DPK version required */
  99.   LONG  MinDPKRevision; /* Minimum DPK revision required */
  100.  
  101.   #ifdef _DCC
  102.    LONG (*Open)(__A0 struct Module *);
  103.   #else
  104.    #ifdef __SASC
  105.      __asm LONG (*Open)(register __a0 struct Module *);
  106.    #else
  107.      LONG (*Open)(struct Module *);
  108.    #endif
  109.   #endif
  110.  
  111.   APTR  ModBase;        /* Generated function base for given CPU */
  112.   BYTE  *Copyright;     /* Copyright details */
  113.   BYTE  *Date;          /* Date of compilation */
  114.   BYTE  *Name;          /* Name of the module */
  115.   WORD  DPKTable;       /* Type of function table to get from DPK */
  116.   WORD  emp;            /* Reserved */
  117. };
  118.  
  119. /*****************************************************************************
  120. ** This structure is 100% private.
  121. */
  122.  
  123. struct ModEntry {
  124.   struct ModEntry  *Next;     /* Next module in list */
  125.   struct ModEntry  *Prev;     /* Previous module in list */
  126.   struct Segment   *Segment;  /* Module segment */
  127.   struct ModHeader *Header;   /* Pointer to module header */
  128.   WORD   ModuleID;            /* Module ID */
  129.   WORD   empty;               /* Reserved */
  130.   BYTE   *Name;               /* Name of the module */
  131. };
  132.  
  133. struct LVOFunction {
  134.   WORD Jump;
  135.   LONG Code;
  136. };
  137.  
  138. /****************************************************************************/
  139.  
  140. #define CPU_68000  1
  141. #define CPU_68010  2
  142. #define CPU_68020  3
  143. #define CPU_68030  4
  144. #define CPU_68040  5
  145. #define CPU_68060  6
  146.  
  147. #endif /* SYSTEM_MODULES_H */
  148.  
  149.